package com.dc.designPattern._14_visitor.impl;

/**
 * Description: 访问者模式_客户端
 *
 * 学习：https://www.jianshu.com/p/1f1049d0a0f4
 *
 * 年底，CEO和CTO开始评定员工一年的工作绩效，员工分为工程师和经理，
 * CTO关注工程师的代码量、经理的新产品数量；
 * CEO关注的是工程师的KPI和经理的KPI以及新产品数量。
 * 由于CEO和CTO对于不同员工的关注点是不一样的，这就需要对不同员工类型进行不同的处理。
 *
 * @author: gdc
 * @date: 2021/5/14
 * @version 1.0
 */
public class Client {

    public static void main(String[] args){
        BusinessReport report = new BusinessReport();

        report.addStaff(new Manager("经理-A"));
        report.addStaff(new Engineer("工程师-A"));
        report.addStaff(new Engineer("工程师-B"));
        report.addStaff(new Engineer("工程师-C"));
        report.addStaff(new Manager("经理-B"));
        report.addStaff(new Engineer("工程师-D"));


        System.out.println(">> 访问者CEO查看信息，如下：");
        CEOVisitor ceoVisitor = new CEOVisitor();
        report.showReport(ceoVisitor);

        System.out.println("--------------------------------------------");

        System.out.println(">> 访问者CTO查看信息，如下：");
        CTOVisitor ctoVisitor = new CTOVisitor();
        report.showReport(ctoVisitor);
    }
}
